// PR target/94046
// { dg-do compile }
// { dg-options "-O2 -mavx2 -mxop" }

#include <x86intrin.h>

#define S(x) struct x { operator __##x (); };
S (m128)
S (m128d)
S (m128i)
S (m256)
S (m256d)
S (m256i)

__m128
f1 (m128 src, float const *base, m128i idx, m128 mask)
{
  return _mm_mask_i32gather_ps (src, base, idx, mask, 2);
}

__m256
f2 (m256 src, float const *base, m256i idx, m256 mask)
{
  return _mm256_mask_i32gather_ps (src, base, idx, mask, 2);
}

__m128
f3 (m128 src, float const *base, m128i idx, m128 mask)
{
  return _mm_mask_i64gather_ps (src, base, idx, mask, 2);
}

__m128d
f4 (m128d x, m128d y, m128i c)
{
  return _mm_permute2_pd (x, y, c, 3);
}

__m128
f5 (m128 x, m128 y, m128i c)
{
  return _mm_permute2_ps (x, y, c, 3);
}

__m256d
f6 (m256d x, m256d y, m256i c)
{
  return _mm256_permute2_pd (x, y, c, 3);
}

__m256
f7 (m256 x, m256 y, m256i c)
{
  return _mm256_permute2_ps (x, y, c, 3);
}
